// 数据服务类 - 提供模拟数据

// 定义数据类型接口
export interface Bookmark {
  id: string;
  title: string;
  url: string;
  description: string;
  tags: string[];
  createdAt: string;
}

export interface Favorite {
  id: string;
  title: string;
  type: 'article' | 'image' | 'video';
  content: string;
  source: string;
  rating: number;
}

export interface Software {
  id: string;
  name: string;
  category: string;
  description: string;
  version: string;
  icon: string;
}

export interface BlogPost {
  id: string;
  title: string;
  content: string;
  excerpt: string;
  tags: string[];
  category: string;
  createdAt: string;
  updatedAt: string;
  author: string;
}

class DataService {
  // 获取博客文章数据
  getBlogPosts(): BlogPost[] {
    return [
      {
        id: '1',
        title: '项目结构说明',
        content: '# 项目结构说明\n\n## 目录结构\n\n```\nsrc/\n├── components/          # 通用组件\n│   ├── Header.tsx      # 头部组件\n│   ├── Footer.tsx      # 底部组件\n│   ├── Content.tsx     # 内容组件（已废弃）\n│   └── pages/          # 页面组件（已迁移到 pages/）\n├── layouts/            # 布局组件\n│   ├── Layout.tsx      # 主布局组件\n│   └── Layout.css      # 布局样式\n├── pages/              # 页面组件\n│   ├── HomePage.tsx    # 首页\n│   ├── HomePage.css    # 首页样式\n│   ├── BookmarkPage.tsx # 网页收藏页面\n│   ├── FavoritePage.tsx # 个人收藏页面\n│   ├── SoftwarePage.tsx # 常用软件页面\n│   └── NotFoundPage.tsx # 404页面\n├── router/             # 路由配置\n│   └── index.tsx       # 路由配置和懒加载\n├── hooks/              # 自定义 Hooks\n│   ├── useAuth.ts      # 认证相关 Hook\n│   └── useNavigation.ts # 导航相关 Hook\n├── services/           # 服务层\n│   ├── api.ts          # API 服务\n│   ├── config.ts       # 配置服务\n│   ├── dataService.ts  # 数据服务\n│   └── user.service.ts # 用户服务\n├── types/              # 类型定义\n│   └── index.ts        # 通用类型定义\n├── constants/          # 常量配置\n│   └── index.ts        # 应用常量\n├── utils/              # 工具函数\n│   └── index.ts        # 通用工具函数\n├── mock/               # Mock 数据\n│   ├── index.ts        # Mock 入口\n│   └── user.ts         # 用户 Mock 数据\n├── assets/             # 静态资源\n│   └── react.svg       # React 图标\n├── App.tsx             # 应用入口（简化版）\n├── main.tsx            # 应用启动文件\n├── index.css           # 全局样式\n└── vite-env.d.ts       # Vite 类型声明\n```\n\n## 主要改进\n\n### 1. 模块化结构\n- **layouts/**: 专门的布局组件目录\n- **pages/**: 页面组件独立管理\n- **router/**: 路由配置集中管理\n- **hooks/**: 自定义 Hooks 复用逻辑\n- **types/**: 类型定义统一管理\n- **constants/**: 常量配置集中管理\n- **utils/**: 工具函数统一管理\n\n### 2. 动态路由\n- 使用 `createBrowserRouter` 创建路由配置\n- 支持懒加载页面组件\n- 动态路由参数处理\n- 404 页面处理\n\n### 3. 布局系统\n- 统一的 Layout 组件\n- 响应式设计\n- 头部导航和页脚\n- 内容区域管理\n\n### 4. 状态管理\n- 使用自定义 Hooks 管理状态\n- 认证状态管理\n- 导航状态管理\n- 本地存储集成\n\n### 5. 类型安全\n- TypeScript 类型定义\n- 路由参数类型\n- API 响应类型\n- 组件 Props 类型\n\n## 使用方式\n\n### 添加新页面\n1. 在 `src/pages/` 目录下创建页面组件\n2. 在 `src/router/index.tsx` 中添加路由配置\n3. 在 `src/layouts/Layout.tsx` 中添加菜单项（如需要）\n\n### 添加新 Hook\n1. 在 `src/hooks/` 目录下创建 Hook 文件\n2. 导出 Hook 函数\n3. 在需要的组件中导入使用\n\n### 添加新工具函数\n1. 在 `src/utils/index.ts` 中添加函数\n2. 导出函数\n3. 在需要的文件中导入使用\n\n## 技术栈\n\n- **React 18**: 前端框架\n- **TypeScript**: 类型安全\n- **React Router v6**: 路由管理\n- **Ant Design**: UI 组件库\n- **Vite**: 构建工具\n- **ESLint**: 代码检查\n\n## 开发规范\n\n1. 组件使用函数式组件 + Hooks\n2. 使用 TypeScript 进行类型检查\n3. 遵循 ESLint 规则\n4. 组件和文件使用 PascalCase 命名\n5. 工具函数使用 camelCase 命名\n6. 常量使用 UPPER_SNAKE_CASE 命名',
        excerpt: '项目结构说明文档，包含目录结构、主要改进、使用方式、技术栈和开发规范。',
        tags: ['项目结构', '开发规范', '技术栈'],
        category: '项目文档',
        createdAt: '2024-09-15T10:00:00Z',
        updatedAt: '2024-09-15T10:00:00Z',
        author: 'John Doe'
      },
      {
        id: '2',
        title: 'TypeScript 进阶技巧',
        content: '# TypeScript 进阶技巧\n\nTypeScript 是一种由 Microsoft 开发的开源编程语言，它是 JavaScript 的超集，添加了可选的静态类型和基于类的面向对象编程。\n\n## 类型保护\n\n类型保护是一种在运行时检查类型的方式，它可以让 TypeScript 在特定的作用域内更准确地推断类型。\n\n```typescript\nfunction isFish(pet: Fish | Bird): pet is Fish {\n  return (pet as Fish).swim !== undefined;\n}\n\n// 在这个 if 语句块中，TypeScript 知道 pet 是 Fish 类型\nif (isFish(pet)) {\n  pet.swim();\n} else {\n  // 在这个 else 语句块中，TypeScript 知道 pet 是 Bird 类型\n  pet.fly();\n}\n```\n\n## 泛型\n\n泛型是指在定义函数、接口或类的时候，不预先指定具体的类型，而在使用的时候再指定类型的一种特性。\n\n```typescript\nfunction identity<T>(arg: T): T {\n  return arg;\n}\n\nconst output1 = identity<string>("myString");\nconst output2 = identity<number>(100);\nconst output3 = identity("implicit type"); // 类型推断为 string\n```\n\n## 条件类型\n\n条件类型可以根据一个条件类型表达式来选择两种类型中的一种。\n\n```typescript\ntype TypeName<T> =\n  T extends string ? "string" :\n  T extends number ? "number" :\n  T extends boolean ? "boolean" :\n  T extends undefined ? "undefined" :\n  T extends Function ? "function" :\n  "object";\n\ntype T1 = TypeName<string>; // "string"\ntype T2 = TypeName<"a">; // "string"\ntype T3 = TypeName<true>; // "boolean"\ntype T4 = TypeName<() => void>; // "function"\ntype T5 = TypeName<string[]>; // "object"\n```\n\n## 映射类型\n\n映射类型可以将一个类型的所有属性转换为新的类型。\n\n```typescript\ntype Readonly<T> = {\n  readonly [P in keyof T]: T[P];\n};\n\ntype Partial<T> = {\n  [P in keyof T]?: T[P];\n};\n\ninterface Person {\n  name: string;\n  age: number;\n}\n\ntype ReadonlyPerson = Readonly<Person>;\ntype PartialPerson = Partial<Person>;\n```\n\n通过掌握这些进阶技巧，你可以更加熟练地使用 TypeScript，提高代码的可读性和可维护性。',
        excerpt: 'TypeScript 是一种由 Microsoft 开发的开源编程语言，它是 JavaScript 的超集，添加了可选的静态类型和基于类的面向对象编程。本文介绍了 TypeScript 的一些进阶技巧。',
        tags: ['TypeScript', '前端开发', '类型系统'],
        category: '技术文章',
        createdAt: '2024-09-10T14:30:00Z',
        updatedAt: '2024-09-10T14:30:00Z',
        author: 'John Doe'
      },
      {
        id: '3',
        title: '我的编程学习之路',
        content: '# 我的编程学习之路\n\n编程是一项有趣且具有挑战性的技能，我从大学时期开始接触编程，至今已有多年的经验。在这条学习之路上，我遇到了许多困难，但也收获了很多乐趣和成就感。\n\n## 起步阶段\n\n我最初学习的是 C 语言，那是在大学的计算机基础课程中。C 语言是一门非常经典的编程语言，它让我了解了编程的基本概念和思想。\n\n记得那时候，我花了很多时间在调试代码上，经常为了一个小小的语法错误而苦恼半天。但当我成功运行第一个 "Hello, World!" 程序时，那种成就感是无法言喻的。\n\n## 进阶学习\n\n在掌握了 C 语言的基础之后，我开始学习 Java 和 Python。Java 是一门面向对象的编程语言，它的语法严谨，适合大型项目的开发。Python 则是一门简洁易学的语言，它的语法优雅，适合快速原型开发。\n\n通过学习不同的编程语言，我逐渐理解了编程的本质并不是语法，而是解决问题的思维方式。不同的编程语言只是工具，关键是要学会如何使用这些工具来解决实际问题。\n\n## 前端开发之旅\n\n后来，我对前端开发产生了兴趣，开始学习 HTML、CSS 和 JavaScript。前端开发是一个充满活力和创新的领域，它让我可以将创意变为可视化的界面。\n\n学习前端开发的过程中，我接触了许多框架和库，如 React、Vue 和 Angular。这些工具大大提高了我的开发效率，让我可以构建出更加复杂和交互性更强的网页应用。\n\n## 持续学习\n\n编程是一个需要持续学习的领域，技术更新换代非常快。为了跟上技术的发展，我养成了阅读技术博客、参加技术社区活动的习惯。\n\n我也开始尝试将自己的学习心得和经验分享出来，写一些技术博客。通过分享，我不仅巩固了自己的知识，也结识了许多志同道合的朋友。\n\n## 结语\n\n编程学习之路漫长而艰辛，但也充满了乐趣和挑战。我相信，只要保持好奇心和学习的热情，就一定能够在编程的世界里不断成长和进步。\n\n如果你也对编程感兴趣，不妨从一个简单的项目开始，一步步地探索编程的奥秘吧！',
        excerpt: '编程是一项有趣且具有挑战性的技能，我从大学时期开始接触编程，至今已有多年的经验。在这条学习之路上，我遇到了许多困难，但也收获了很多乐趣和成就感。',
        tags: ['编程学习', '个人成长', '经验分享'],
        category: '生活随笔',
        createdAt: '2024-09-05T09:15:00Z',
        updatedAt: '2024-09-05T09:15:00Z',
        author: 'John Doe'
      }
    ];
  }
  
  // 根据ID获取特定的博客文章
  getBlogPostById(id: string): BlogPost | undefined {
    return this.getBlogPosts().find(post => post.id === id);
  }
  
  // 根据分类获取博客文章
  getBlogPostsByCategory(category: string): BlogPost[] {
    return this.getBlogPosts().filter(post => post.category === category);
  }
  
  // 获取网页收藏数据
  getBookmarks(): Bookmark[] {
    return [
      {
        id: '1',
        title: 'React 官方文档',
        url: 'https://react.dev/',
        description: 'React 官方文档，包含最新的 React 特性和使用指南',
        tags: ['react', 'javascript', '前端'],
        createdAt: '2024-09-15'
      },
      {
        id: '2',
        title: 'TypeScript 入门教程',
        url: 'https://www.typescriptlang.org/docs/',
        description: 'TypeScript 官方文档和教程资源',
        tags: ['typescript', 'javascript', '教程'],
        createdAt: '2024-09-10'
      },
      {
        id: '3',
        title: 'Ant Design 组件库',
        url: 'https://ant.design/',
        description: '企业级 UI 设计语言和 React 组件库',
        tags: ['react', 'ui', '组件库'],
        createdAt: '2024-09-05'
      }
    ];
  }

  // 获取个人收藏数据
  getFavorites(): Favorite[] {
    return [
      {
        id: '1',
        title: '现代前端架构设计模式',
        type: 'article',
        content: '介绍现代前端开发中的各种架构设计模式和最佳实践...',
        source: '掘金',
        rating: 5
      },
      {
        id: '2',
        title: '前端性能优化实战',
        type: 'article',
        content: '详细讲解前端性能优化的各种方法和实战案例...',
        source: '知乎',
        rating: 4
      },
      {
        id: '3',
        title: 'React Hooks 动画效果展示',
        type: 'video',
        content: '展示如何使用 React Hooks 创建流畅的动画效果',
        source: 'YouTube',
        rating: 5
      }
    ];
  }

  // 获取常用软件数据
  getSoftware(): Software[] {
    return [
      {
        id: '1',
        name: 'Visual Studio Code',
        category: '开发工具',
        description: '轻量级但功能强大的代码编辑器',
        version: '1.93.1',
        icon: 'vscode.png'
      },
      {
        id: '2',
        name: 'Chrome',
        category: '浏览器',
        description: 'Google Chrome 网络浏览器',
        version: '129.0.6668.90',
        icon: 'chrome.png'
      },
      {
        id: '3',
        name: 'Figma',
        category: '设计工具',
        description: '在线 UI 设计协作工具',
        version: '119.0.0',
        icon: 'figma.png'
      }
    ];
  }

  // 根据ID获取特定的网页收藏
  getBookmarkById(id: string): Bookmark | undefined {
    return this.getBookmarks().find(bookmark => bookmark.id === id);
  }

  // 根据ID获取特定的个人收藏
  getFavoriteById(id: string): Favorite | undefined {
    return this.getFavorites().find(favorite => favorite.id === id);
  }

  // 根据ID获取特定的软件
  getSoftwareById(id: string): Software | undefined {
    return this.getSoftware().find(software => software.id === id);
  }
}

export default new DataService();